package com.truedian.wg.components.organism.dialog.internal

import com.tencent.kuikly.core.base.Color
import com.truedian.wg.components.organism.dialogUtil.internal.DialogComponent
import com.truedian.wg.components.organism.dialogUtil.internal.DialogId


/**
 * 弹窗堆栈项数据类
 *
 * 表示弹窗堆栈中的单个弹窗项，包含弹窗的所有必要信息和状态。
 * 每个弹窗在堆栈中都对应一个DialogStackItem实例。
 *
 * ## 主要属性
 * - 弹窗唯一标识和内容组件
 * - 弹窗显示位置和UI配置
 * - 弹窗显示状态和动画状态
 *
 * ## 状态管理
 * - isShow: 控制弹窗的显示/隐藏
 * - isStartAnim: 控制弹窗动画的开始
 *
 * ## 生命周期
 * 1. 创建时isShow为true，isStartAnim为false
 * 2. 添加到堆栈后，延时设置isStartAnim为true开始显示动画
 * 3. 取消时先设置isShow为false播放隐藏动画
 * 4. 动画完成后从堆栈中移除整个DialogStackItem
 *
 * @param dialogId 弹窗唯一标识
 * @param dialogComponent 弹窗内容组件
 * @param dialogPosition 弹窗显示位置（居中或底部）
 * @param dialogUiConfig 弹窗UI配置，包含样式和动画设置
 *
 * @see DialogId 弹窗标识类型别名
 * @see DialogComponent 弹窗组件类型别名
 * @see DialogPosition 弹窗位置枚举
 * @see DialogUiConfig 弹窗UI配置数据类
 *
 * @since 1.0.0
 * @author 组件开发团队
 */
data class DialogStackItem(
    val dialogId: DialogId,
    val dialogComponent: DialogComponent,
    val dialogPosition: DialogPosition,
    val dialogUiConfig: DialogConfig = DialogConfig(),
    var internalDialogItemView: InternalDialogItemView? = null

)

/**
 * 弹窗UI配置数据类
 *
 * 定义弹窗的视觉样式和动画配置，提供弹窗外观的自定义能力。
 *
 * ## 配置项说明
 * - radius: 弹窗圆角半径，影响弹窗的视觉风格
 * - bgColor: 弹窗背景颜色，默认为白色
 * - animationTime: 动画持续时间，单位毫秒
 * - maskLayerColor: 遮罩层颜色，默认为半透明黑色
 *
 * ## 使用示例
 * ```kotlin
 * val config = DialogUiConfig(
 *     animationTime = 500,
 *     maskLayerColor = Color(0x80000000)
 * )
 * ```
 *
 * @param animationTime 动画持续时间（秒），默认0.3s
 * @param maskLayerColor 遮罩层颜色，默认半透明黑色
 * @param isCanCancelOutSide 是否可以点击遮罩层关闭弹窗
 * @param isCanCancelBackEvent 是否可以点击后退按钮关闭弹窗
 *
 * @since 1.0.0
 * @author CSP
 */
data class DialogConfig(
    val animationTime: Float = 0.1f,
    val maskLayerColor: Color = Color(0x90000000),
    val isCanCancelOutSide: Boolean = true,
    val isCanCancelBackEvent: Boolean = true,
    val isCanClickBackground: Boolean = false
)